上章讲了公钥密码的优点,这里讲一下缺点:
公钥密码不能指定发送者。公钥是公开的,那么任何人都可以发送给持有私钥的接收者信息。
最主要的还是效率,公钥密码的时间复杂度比私钥密码高出2-3个数量级。
Security distribution of public keys
到目前为止,我们对公钥密码的讨论仅限于被动(EAV)敌手。若敌手能够截获所有信息,并且通信双方没有在此之前共享密钥,则无法实现secrecy。
因此,在本章有一个很重要的假设:发送者能够直接获得接收者的公钥(安全密钥分发)。该假设的原因是因为存在有其他方式能够抵御主动攻击,因此将密钥分发和公钥加密的安全性分开讨论是合理的。
CPA attacks
EAV Security?
P u b K A , ∏ e a v PubK_{\mathcal{A},\prod}^{\mathbf{eav}} P u b K A , ∏ eav expriment
敌手预言机事先给定安全参数n。
预言机:( p k , s k ) ← G e n ( 1 n ) , b ← { 0 , 1 } (pk,sk)\leftarrow Gen(1^n),b\leftarrow \{0,1\} ( p k , s k ) ← G e n ( 1 n ) , b ← { 0 , 1 } ,并将公钥返回给攻击者。
攻击者A \mathcal{A} A 发送( m 0 , m 1 ) (m_0,m_1) ( m 0 , m 1 ) ,预言机返回c ′ ← E n c p k ( m b ) c'\leftarrow Enc_{pk}(m_b) c ′ ← E n c p k ( m b )
攻击者返回b ′ b' b ′ ,若b = b ′ b=b' b = b ′ 返回1,否则0.
A public-key encryption scheme ∏ = ( G e n , E n c , D e c ) \prod =(Gen, Enc, Dec) ∏ = ( G e n , E n c , Dec ) has indistinguishable encryption in the presence of an eavesdropper if for all probabilistic polynomial-time adversary A \mathcal{A} A there is a negligible function n e g l negl n e g l such that
P r [ P u b K A , ∏ e a v ( n ) = 1 ] ≤ 1 / 2 + n e g l ( n ) Pr[PubK_{\mathcal{A},\prod}^{\mathbf{eav}}(n)=1]\leq 1/2+negl(n) P r [ P u b K A , ∏ eav ( n ) = 1 ] ≤ 1/2 + n e g l ( n )
Public key definition
G e n ( 1 n ) Gen(1^n) G e n ( 1 n ) 生成公钥p k pk p k ,私钥s k sk s k .
E n c p k ( m ) → c Enc_{pk}( m)\rightarrow c E n c p k ( m ) → c ,其中m从消息空间M \mathcal{M} M 中获取。
D e c s k ( c ) → m o r ⊥ Dec_{sk}( c)\rightarrow m~ or~
\bot De c s k ( c ) → m or ⊥
需要注意的是,公钥密码允许有可忽略的概率使得
D e c s k ( E n c p k ( m ) ) = m Dec_{sk}(Enc_{pk}(m))=m De c s k ( E n c p k ( m )) = m 不成立。
因此,Enc可以是确定性或概率性的,Dec允许Perfectly Correct,但也允许以可忽略概率失败。
需要注意的是,每一个公钥密码的实例中,消息空间都是隐含着与公钥p k pk p k 有关,可能是某些代数结构中的元素。因此,消息m可能需要转换。
Some Theorem
若公钥加密方案保证EAV安全,那么其也是IND-CPA-Secure(IND= indistinguishable)
这条很好说明,公钥的公开使任何人都可以加密信息,相当于获得了E n c Enc E n c 预言机。
不做证明(之后看看能不能补上)
Deterministic encryption scheme
没有确定性的公钥加密方案满足IND-CPA-Secure
在实践中,我们想让同一条公钥pk去加密多条消息,于是有:
若公钥加密方案满足IND-CPA-secure,那么其也满足multiple encryption的不可区分性。
Arbitrary long messages
由上文对多消息加密的安全性,可以构造一个加密方案,其基于最初的公钥加密:每一块都来个加密然后发送。该方案是IND-CPA-secure的。
然而,这不够高效,于是有混合加密方案:
公钥加密只加密私钥加密的密钥,私钥加密整条信息连带着公钥加密的密钥一同发送。
CCA attacks
CCA attack experiment
事先给定n。
预言机:( p k , s k ) ← G e n ( 1 n ) , b ← { 0 , 1 } (pk,sk)\leftarrow Gen(1^n),b\leftarrow \{0,1\} ( p k , s k ) ← G e n ( 1 n ) , b ← { 0 , 1 } ,并将公钥返回给攻击者。
攻击者发送密文c i c_i c i ,预言机返回D e c s k ( c i ) Dec_{sk}(c_i) De c s k ( c i )
可进行多次第三步,之后敌手发送m 0 , m 1 m_0,m_1 m 0 , m 1 ,预言机返回c ′ c' c ′
之后还可以多次进行第三步,但无法对c ′ c' c ′ 进行Dec。
敌手发送b',之后和其他定义一样。
对任意PPT敌手A \mathcal{A} A ,若满足以下性质,则满足CCA-secure:
P r [ P u b K A , ∏ c c a = 1 ] ≤ 1 / 2 + n e g l ( n ) Pr[PubK_{\mathcal{A},\prod}^{\mathbf{cca}}=1]\leq 1/2+negl(n) P r [ P u b K A , ∏ cca = 1 ] ≤ 1/2 + n e g l ( n )
Key-encapsulation machanism(KEM)
KEM定义为G e n , E n c a p s , D e c a p s Gen,Encaps,Decaps G e n , E n c a p s , Dec a p s
G e n ( 1 n ) → ( p k , s k ) Gen(1^n)\rightarrow (pk,sk) G e n ( 1 n ) → ( p k , s k )
E n c a p s ( 1 n , p k ) → ( c , k ) , k ∈ { 0 , 1 } p ( n ) Encaps(1^n,pk)\rightarrow (c,k),k\in\{0,1\}^{p(n)} E n c a p s ( 1 n , p k ) → ( c , k ) , k ∈ { 0 , 1 } p ( n )
D e c a p s ( s k , c ) → k Decaps(sk,c)\rightarrow k Dec a p s ( s k , c ) → k
同样也要求存在可忽略的概率不成功(公钥啊嗯)
KEM experiment
事先给定n。
预言机G e n ( 1 n ) → ( p k , s k ) , E n c a p s p k ( 1 n ) → ( c ′ , k ) Gen(1^n)\rightarrow (pk,sk),Encaps_{pk}(1^n)\rightarrow (c',k) G e n ( 1 n ) → ( p k , s k ) , E n c a p s p k ( 1 n ) → ( c ′ , k ) ,随机选择b ← { 0 , 1 } b\leftarrow\{0,1\} b ← { 0 , 1 } ,若b=0,k'=k,否则k从{ 0 , 1 } n \{0,1\}^n { 0 , 1 } n 随机获取,返回敌手( p k , ( c ′ , k ′ ) ) (pk,(c',k')) ( p k , ( c ′ , k ′ ))
敌手返回b',剩余和其他预言机定义相同。
对任意PPT敌手A \mathcal{A} A ,若满足以下性质则有CPA-secure:
P r [ K E M A , ∏ p a = 1 ] ≤ 1 / 2 + n e g l ( n ) Pr[KEM_{\mathcal{A},\prod}^{\mathbf{pa}}=1]\leq 1/2+negl(n) P r [ K E M A , ∏ pa = 1 ] ≤ 1/2 + n e g l ( n )
用先前构造的公钥密码方案(IND-CPA/IND-CCA)可以很容易构造KEM(IND-CPA/IND-CCA),构造方法略(懒),把加密的消息换成k就行了。
需要注意的是,由于k本身需要“随机”选择,因此消息空间需要具有合适的“min-entropy”。
当然,专门的KEM算法效率肯定比这种构造的效率要高。
Hybrid Encryption
有了KEM,就可以构造更高效的(混合)公钥加密。
设∏ = ( G e n , E n c a p s , D e c a p s ) , ∏ ′ = ( G e n ′ , E n c ′ , D e c ′ ) \prod=(Gen,Encaps,Decaps),\prod'=(Gen',Enc',Dec') ∏ = ( G e n , E n c a p s , Dec a p s ) , ∏ ′ = ( G e n ′ , E n c ′ , De c ′ ) ,构造∏ h y = ( G e n h y , E n c h y , D e c h y ) \prod^{hy}=(Gen^{hy},Enc^{hy},Dec^{hy}) ∏ h y = ( G e n h y , E n c h y , De c h y )
G e n h y : ( p k , s k ) ← G e n ( 1 n ) Gen^{hy}:(pk,sk)\leftarrow Gen(1^n) G e n h y : ( p k , s k ) ← G e n ( 1 n )
E n c h y : c ′ ← E n c k ′ ( m ) Enc^{hy}:c' \leftarrow Enc_k'(m) E n c h y : c ′ ← E n c k ′ ( m )
output:( c , c ′ ) (c,c') ( c , c ′ )
D e c h y : k = D e c a p s s k ( c ) , m = D e c k ′ ( c ′ ) Dec^{hy}:k=Decaps_{sk}(c),m=Dec_k'(c') De c h y : k = Dec a p s s k ( c ) , m = De c k ′ ( c ′ )
若∏ \prod ∏ 是CPA-secure KEM,∏ ′ \prod' ∏ ′ 私钥密码是EAV下安全,则∏ h y \prod^{hy} ∏ h y 是CPA-secure的。
若∏ \prod ∏ 是CCA-secure KEM,∏ ′ \prod' ∏ ′ 私钥密码是CCA-secure,则∏ h y \prod^{hy} ∏ h y 是CCA-secure的。
EIGamal Encryption
基本思路:
利用DH problem,接收者选择a ← Z q a\leftarrow \mathbb{Z}_q a ← Z q 作为私钥,而把群( G , q , g ) (G,q,g) ( G , q , g ) 和g a g^a g a 作为公钥公开,那么任何人可以指定b,传输g b , K ⋅ M g^b,K\cdot M g b , K ⋅ M 给接收者,则接收者运行K ← ( g b ) a K\leftarrow(g^b)^a K ← ( g b ) a ,从而解密,并共享密钥。
scheme
G e n ( 1 n ) : R u n ( G , q , g ) ← G ( 1 n ) Gen(1^n):Run(G,q,g)\leftarrow\mathbb{G}(1^n) G e n ( 1 n ) : R u n ( G , q , g ) ← G ( 1 n ) 随机选择x ← Z q x\leftarrow\mathbb{Z}_q x ← Z q ,计算y = g x y=g^x y = g x
( s k , p k ) = ( ( G , q , g , x ) ( G , q , g , y ) ) (sk,pk)=((G,q,g,x)(G,q,g,y)) ( s k , p k ) = (( G , q , g , x ) ( G , q , g , y ))
E n c ( m , p k ) : Enc(m,pk): E n c ( m , p k ) : 对于输入m,随机选择r ← Z q , r\leftarrow\mathbb{Z}_q, r ← Z q ,
C = ( g r , m ⋅ y r ) C=(g^r,m\cdot y^r) C = ( g r , m ⋅ y r )
D e c ( C , s k ) : C = ( C 1 , C 2 ) , Dec(C,sk):C=(C_1,C_2), Dec ( C , s k ) : C = ( C 1 , C 2 ) ,
m = C 2 ⋅ ( C 1 x ) − 1 m=C_2\cdot(C_1^x)^{-1} m = C 2 ⋅ ( C 1 x ) − 1
在这里可以认为( G , q , g ) (G,q,g) ( G , q , g ) 为安全参数。
Security
设G G G 为有限群,m ∈ G m\in G m ∈ G 任意,随机选择的k ∈ G k\in G k ∈ G 和设置的k ′ = k ⋅ m k'=k\cdot m k ′ = k ⋅ m 具有相同的分布,即对任意的g ′ ∈ G g'\in G g ′ ∈ G
P r [ k ⋅ m = g ′ ] = 1 / G Pr[k\cdot m=g']=1/G P r [ k ⋅ m = g ′ ] = 1/ G
上方的lemma中,可以看到类似于私钥密码中的一次一密定义,那么由此,可以设想出另外一种"EIGamal"的加密方式:
随机选择g z g^z g z ,让密文C = ( g r , m ⋅ g z ) C=(g^r,m\cdot g^z) C = ( g r , m ⋅ g z )
因此, g z g^z g z 对敌手是未知的,则其能够满足信息论安全(即完美加密)
EIGamal的安全性证明便基于此类的不可区分性小于1 / 2 + n e g l ( n ) 1/2+negl(n) 1/2 + n e g l ( n ) ,而其证明又依赖于DDH assumption。
安全证明就略了😋
RSA attacks
回顾一下“课本”上的RSA:
G e n ( ) Gen() G e n ( ) :选择两个大素数p,q,N=pq,均匀选择e,1 < e < ϕ ( N ) 1<e<\phi(N) 1 < e < ϕ ( N ) 且g c d ( e , ϕ ( N ) ) = 1 gcd(e,\phi(N))=1 g c d ( e , ϕ ( N )) = 1 .计算d , e d = 1 ϕ ( N ) d,ed=1~ \phi(N) d , e d = 1 ϕ ( N )
E n c ( p k , m ) : c = m e m o d N Enc(pk,m): c=m^e~ mod N E n c ( p k , m ) : c = m e m o d N
D e c ( s k , c ) : m = c d m o d N Dec(sk,c): m=c^d ~ mod N Dec ( s k , c ) : m = c d m o d N
RSA假设中,m是随机均匀选择的,但其本质上而言,消息并不满足这一条件。同时,RSA加密过程是确定性的,因此必定不是安全的。
具体攻击方法略。反正很容易构造捏。
由上,RSA在实际使用过程中需要进行预处理等过程,才能够真正作为加密算法进行公钥加密。
RSA-OAEP便用了哈希函数,使得RSA-OAEP是CCA Secure的(证明过程中用到了随机函数,其用SHA-256进行实例化。)